package com.llws.petgoodsshop.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.llws.petgoodsshop.bean.RtnInfo;
import com.llws.petgoodsshop.bean.Type;
import com.llws.petgoodsshop.mapper.TypeMapper;
import com.mysql.cj.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * type对应的controller
 */
@RestController
@RequestMapping("/type")
public class TypeController {
    @Autowired
    private TypeMapper typeMapper;

    /**
     * 添加类别
     * 请求方式：POST
     * 请求URL：/pet/type/add
     * 请求参数：表单
     * 响应结果：JSON字符串
     * @param type
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "add",method = RequestMethod.POST)
    public RtnInfo add(Type type) throws Exception{
        System.out.println("--进入到了类别添加："+type);
        // 创建一个rtnInfo对象，用来封装响应到前端的信息
        RtnInfo rtnInfo = new RtnInfo();
        // 非空校验
        if(StringUtils.isNullOrEmpty(type.getTypeName())){
            rtnInfo.setCode(-1);
            rtnInfo.setMsg("类别名称不能为空！");
        }else if(StringUtils.isNullOrEmpty(type.getTypeDepict())){
            rtnInfo.setCode(-1);
            rtnInfo.setMsg("类别描述为空！");
        }else{
            // 访问数据库
            if(typeMapper.addType(type)>0){
                rtnInfo.setCode(1);
                rtnInfo.setMsg("类别添加成功！");
            }else{
                rtnInfo.setCode(0);
                rtnInfo.setMsg("类别添加失败！");
            }
        }
        return rtnInfo;
    }


    /**
     * 查询所有类别（支持关键字，不支持分页）
     * 请求方式：GET
     * 请求url：/pet/type/findAll/关键字/当前页码
     * 响应结果：JSON字符串
     * @param typeName
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "findAll/{typeName}/{currentPage}",method = RequestMethod.GET)
    public RtnInfo findAll(@PathVariable(value = "typeName",required = true)String typeName,
                           @PathVariable(value = "currentPage",required = false)Integer currentPage) throws Exception{
        System.out.println("--进入到了图书类别列表查询："+typeName);

        // 创建一个rtnInfo,封装响应到前端的信息
        RtnInfo rtnInfo = new RtnInfo();
        // 对关键字进行非空校验
        // 注意：如果要查询所有，就送一个 单引号占位置
        if(StringUtils.isNullOrEmpty(typeName)|| typeName.equals("''")){
            typeName = "";
        }
        // 非空校验
        if(currentPage==null){
            currentPage = 1;// 如果没有获取到前端传递的当前页，就默认第一页
        }
        // 1. 访问数据库之前，需要设置分页条件,两个参数：pageNum-当前是第几页，pageSize=每页显示的条目数
        PageHelper.startPage(currentPage,6);
        // 2. 访问数据库
        List<Type> list = typeMapper.findTypeAll(typeName);
        // 3. 访问数据库之后，封装数据
        PageInfo<Type> lists = new PageInfo<>(list,5);
        System.out.println("-----type-list:"+lists);
        if(list!=null){
            // 封装信息到前端
            rtnInfo.setCode(1);
            rtnInfo.setMsg("图书类别列表信息获取成功！");
            rtnInfo.setResult(lists);
        }else{
            // 封装信息到前端
            rtnInfo.setCode(0);
            rtnInfo.setMsg("图书类别列表信息获取失败！");
        }

        return rtnInfo;
    }

    /**
     * 根据编号修改类别
     * 请求方式：POST
     * 请求URL：/shop/type/update
     * 请求参数：表单
     * 响应结果：JSON字符串
     * @param type
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "update",method = RequestMethod.POST)
    public RtnInfo update(Type type) throws Exception{
        System.out.println("--进入到了类别修改方法："+type);
        // 创建一个rtnInfo，用来封装需要响应到前端的信息
        RtnInfo rtnInfo = new RtnInfo();
        // 非空检验
        if(StringUtils.isNullOrEmpty(type.getTypeId()+"")){
            rtnInfo.setCode(-1);
            rtnInfo.setMsg("类别编号不能为空！");
        }else if(StringUtils.isNullOrEmpty(type.getTypeName())){
            rtnInfo.setCode(-1);
            rtnInfo.setMsg("类别名称不能为空！");
        }else if(StringUtils.isNullOrEmpty(type.getTypeDepict())){
            rtnInfo.setCode(-1);
            rtnInfo.setMsg("类别描述不能为空！");
        }else{
            // 访问数据库
            if(typeMapper.updateType(type)>0){
                rtnInfo.setCode(1);
                rtnInfo.setMsg("类别修改成功！");
            }else{
                rtnInfo.setCode(0);
                rtnInfo.setMsg("类别修改失败！");
            }
        }
        return rtnInfo;
    }

    /**
     * 根据编号删除类别
     * 请求方式：GET
     * 请求URL：/shop/type/delete/{typeId}
     * 响应结果：JSON字符串
     * @param typeId
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "delete/{typeId}")
    public RtnInfo delete(@PathVariable(value = "typeId",required = true)Integer typeId) throws Exception{
        System.out.println("--进入到了类别删除方法："+typeId);
        // 创建一个rtnInfo对象，用来封装需要响应到前端的信息
        RtnInfo rtnInfo = new RtnInfo();
        // 非空检验
        if(StringUtils.isNullOrEmpty(typeId+"")){
            rtnInfo.setCode(-1);
            rtnInfo.setMsg("类别编号不能为空！");
        }else{
            // 访问数据库
            if(typeMapper.deleteType2(typeId)>0){
                rtnInfo.setCode(1);
                rtnInfo.setMsg("类别删除成功！");
            }else{
                rtnInfo.setCode(0);
                rtnInfo.setMsg("类别删除失败！");
            }
        }
        return rtnInfo;
    }
}
